Journal d'un Terrien

Web log de Serge Boisse

On line depuis 1992 !

Publicité
Si cette page vous a plu, Copiez son adresse et partagez-la !
http://sboisse.free.fr/programmation/IA/HAL/Percept sequences de nombres reels.php
Savez-vous quels sont les articles les plus vendus sur Amazon.fr ?
Percept séquences de nombres réels

Voir aussi:

Percept séquences de nombres réels

Pasted image 20250306231952.png
Il s'agit de créer un "observateur" de bas niveau qui reçoit en entrée un flux de percepts issus d'un capteur (unique dans notre cas), et qui pourra alerter des "clients" sur certains phénomènes auxquels ils seront abonnés.

C'est assez voisin de ce que fait le module javascript (timeseries-analysis) qui semble incroyable notamment pour les prédictions, à ceci-près que ici on voudrait faire une analyse temps réel.

Un percept de bas niveau

fonctionnalités

Donc, les réels. Notre percept devra prendre en entrée un flux de nombres réels, et :

  • calculer des valeurs statistiques : (fonctions d'un certain horizon temporel)
    • min, max, moyenne mobile, écart-type (volatilité)
  • détecter les "évènements" élémentaires :
    • sur les séquences :
      • absence de donnée depuis... / reprise
      • stabilité (relative)
      • croissance, décroissance,
      • oscillation, boucle
      • variation brusque, inhabituelle, pic, trou
    • sur la dernière valeur :
      • sur ou sous la moyenne
      • croisement de la moyenne
      • donnée hors limite ou "bizarre"
  • prédire la suite (avec un coef de probabilité ?) en inférant un pattern

Horizon

C'est le nombre de données à conserver. Il peut être prédéfini à la création du percept, ou (mieux) être "infini". Dans ce cas les données anciennes auront un poids décroissant. et pourront même, être remplacées par leur moyenne et écart type, ou, mieux encore, par une fonction "best fit". L'idéal semble une pondération exponentielle...

Mais attention à ne pas se révéler trop sensible aux données récentes : le fait de figer progressivement certaines variables est un processus d'apprentissage qu'il ne faut pas négliger.

Entrées :

Un flux de nombre réels. Typiquement, notre analyseur de perception "percept" sera un objet avec une méthode nouveau_percepy(x : réel), et l'objet appellera des callbacks en fonction des abonnements qu'il aura eu précédemment.

Donc ce qu'on fait en gros, c'est mettre à jour une série temporelle à chaque nouvelle donnée reçue, et faire une analyse. Time serie (page web)

Attention ⚠
L'entrée étant une série temporelle, il est souvent nécessaire de la régulariser (intervalle de temps constant entre chaque point consécutif).

Pire, notre percept ne prend en entrée que le flux de valeurs . Les sont des timestamps ? On peut imaginer plusieurs types de déclencheurs :

  • l'arrivée d'une donnée
  • un timer sans donnée. Ce qui permet 'optionnellement ?) de créer des évènements en sortie "pas de donnée reçue depuis..."
  • une demande de statut ou de prédiction d'un "client".

Lorsqu' une série de donnée arrive entre deux tics, on leur associera un égal au dernier timestamp, plus un "numéro de série"

Sorties

Elle peut être déclenchée par :

  • l'arrivée d'une nouvelle donnée et le recalcul
  • un timer (éventuellement différent de celui d'entrée)
  • une demande explicite de statut

Un client peut ainsi demander à recevoir un "rapport" :

  • immédiat
  • périodiquement
  • sur évènement "significatif"
  • sur évènement et au minimum tous les

Algorithmes

Soit une série représentant les percepts (e.g. prix à la clôture, mesure de pression...).

On calcule la moyenne mobile (simple) à un instant donné sur les dernières valeurs :

Suivi de l'écart-type:

Pour détecter les données "extrêmes", On s'inspirera des bandes de Bollinger

  • bande supérieure :
  • bande centrale (moyenne mobile) : $\mu $
  • bande inférieure :

Le paramètre est historiquement égal à 2 (probabilité de 95%) mais peut être adapté selon l'analyse effectuée. Paramètre de sensibilité

écart max à la moyenne proportion des valeurs
38.29%
68.27%
95,45 %
99,73%
99,99936%

Donc OK pour la détection des variation brusques et donnée hors limite.

Pour les tendances globales, c'est plus compliqué. Un moyen de le faire est de couper l'horizon temporel en deux, et de comparer les deux moyennes et et les deux écarts-type et .

  • si on a une tendance croissante, et inversement.
  • si la tendance est forte (S est la sensibilité)

Pour la stabilité relative, on pourrait aussi comparer la moyenne et l'écart-type : Intuitivement, si est petit, on a une relative stabilité. Mais le problème, c'est que même si dans l'analyse financière on a toujours des valeur positives, dans un univers plus abstrait ces valeurs peuvent aussi être négatives et on peut avoir , auquel cas notre critère se casse la figure.

Pa contre, Toujours en coupant en deux l'intervalle horizon, si la séquence est relativement stable.

Une autre méthode est d'utiliser une régression linéaire :

Le principe est de considérer nos percepts comme proche d'une droite : , où est l'erreur

si et sont les moyennes et la variance, on aura

plus est proche de 1 plus la corrélation linéaire est légitime.

Pour la détection de boucles, il faudra faire attention à l'incertitude qui peut exister sur les données.

Un moyen de le faire est de discrétiser le signal et de faire alors une recherche de boucle sur un flux en nombres entiers, ce qui est un autre percept...

Ou alors une FFT ?

Paramètres

Questions

Auto-ajustement de la sensibilité ? de la durée à conserver ?
oscillations et boucles ?
FFT ?

Publicité
Commentaires

Commentaires (0) :

Page :



Ajouter un commentaire (pas besoin de s'enregistrer)

Pseudo :
Message :


image de protection
En cliquant sur le bouton "Envoyer" vous acceptez les conditions suivantes : Ne pas poster de message injurieux, obscène ou contraire à la loi, ni de liens vers de tels sites. Respecter la "netiquette", ne pas usurper le pseudo d'une autre personne, respecter les posts faits par les autres. L'auteur du site se réserve le droit de supprimer un ou plusieurs posts à tout moment. Merci !
Ah oui : le bbcode et le html genre <br>, <a href=...>, <b>b etc. ne fonctionnent pas dans les commentaires. C'est voulu.
< Retour en haut de la page